// 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集，使得两个子集的元素和相等。

 

// 示例 1：

// 输入：nums = [1,5,11,5]
// 输出：true
// 解释：数组可以分割成 [1, 5, 5] 和 [11] 。
// 示例 2：

// 输入：nums = [1,2,3,5]
// 输出：false
// 解释：数组不能分割成两个元素和相等的子集。



class Solution {
public:
    bool canPartition(vector<int>& nums) {
        int n=nums.size();
        int sum=0;
        for(int num:nums) sum+=num;
        if(sum%2) return false;
        sum/=2;
        vector<vector<bool>> dp(n+1,vector<bool>(sum+1,false));
         dp[0][0]=true;
        for(int i=1;i<=n;i++) 
        for(int j=1;j<=sum;j++){
            dp[i][j]=dp[i-1][j];
            if(j>=nums[i-1])
            {
                dp[i][j]=dp[i-1][j]||dp[i-1][j-nums[i-1]];
            }
    }            
        return dp[n][sum];
    }
};